package com.sgj.observer;

import cn.hutool.core.util.RandomUtil;
import lombok.extern.slf4j.Slf4j;

import java.math.BigDecimal;

/**
 * 天气类
 * @Author: Guoji Shen
 * @Date: 2022/11/7 13:56
 */
@Slf4j
public class Weather extends Subject {

    /**
     * 温度
     */
    private float temp;

    /**
     * 初始化构造函数，令 temp 为一个不可能的温度值，这样每次获取温度时一定会是一个新的状态
     */
    public Weather() {
        this.temp = -1000;
    }

    /**
     * 获取温度
     * @return
     */
    public float getTemperature() {
        return this.temp;
    }

    /**
     * 模拟获取温度，若状态更新，则通知所有观察者
     */
    public void fetchWeatherData() {
        float max = 50, min = -30;
        float newTemp = RandomUtil.randomBigDecimal(new BigDecimal(min), new BigDecimal(max)).floatValue();
        log.info("原temp:{},更新temp:{}", this.temp, newTemp);
        if (newTemp != this.temp) {
            this.temp = newTemp;
            notifyObservers();
        }
    }
}